package edu.qd.learn.newchapter.chapter03.lambda;

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.*;

/**
 * @author 布衣
 */
public class Question01 {

    public static void initArrays(int[] arrs) {
        //原子性操作  (当前一个线程调用此属性时，其它线程要等待我完成以后再操作)
        AtomicInteger a = new AtomicInteger(0);

        // lambda 可以调用函数 外面的常量
        Arrays.stream(arrs).forEach(x -> {
            int b = a.getAndIncrement();
            arrs[b] = b;
        });
    }


    //    使用 Lambda 表达式初始化一个整数数组，使其每个元素的值等于其索引值。
    public static void initArrays(int[] arrs, Function<Integer, Integer> fn) {
        for (int i = 0; i < arrs.length; i++) {
            arrs[i] = fn.apply(i);
        }
    }

    public static void main(String[] args) {
        int[] arr1 = new int[10];
        initArrays(arr1);
        System.out.println(Arrays.toString(arr1));
//        initArrays(arr1, (x) -> x+1);
//        System.out.println(Arrays.toString(arr1));


//        Predicate<Integer> sc = x -> x > 60;
//        String[] names = new String[]{"绵延", "张三", "李四", "张三"};
//        Question01.print(names, x -> x.startsWith("张"));
    }

    /**
     * 练习lambda01 判断 names当中的哪些名称满足check，满足输出
     *
     * @param names 名称数组
     * @param check 断言
     */
    public static void print(String[] names, Predicate<String> check) {
        for (String name : names) {
            if (check.test(name)) {
                System.out.println(name);
            }
        }
    }


}
